package com.nantian.common.util;


import org.apache.commons.codec.CharEncoding;

import java.io.UnsupportedEncodingException;

/**
 * <p>ClassName: StringUtils.</p>
 * <p>Description: 字符串工具</p>
 * 集成常使用的字符串工具
 * <p>Copyright: Copyright©2014</p>
 * <p>Company: 广州南天电脑系统有限公司</p>
 * <p>Date: 2019-02-25</p>
 *
 * @author 刘晓辉
 * @version 1.0
 */
public class StringUtils {

	/**
	 * 判断传入的字符串对象是否为空字符串.<br>
	 * (ps:会自动过滤字符串前后的空格，且当字符串为空字符时，也返回true)
	 * @param str 字符串
	 * @return boolean
	 */
	public static boolean isBlank(final String str) {
		return str == null || "".equals(str.trim());
	}
	public static boolean isNotBlank(final String str) {
		return str != null && !"".equals(str.trim());
	}

	/**
	 * 将字符串转成byte数组，默认utf-8
	 * @param str 字符串
	 * @return 字节数组
	 */
	public static byte[] stringToBytes(String str){
		return stringToBytes(str, CharEncoding.UTF_8);
	}

	/**
	 * 羌字符串转成指定编码的字节数组
	 * @param str 字符串
	 * @param charsetName 编码格式
	 * @return 字节数组
	 */
	public static byte[] stringToBytes(String str, String charsetName) {
		try {
			if (str == null || isBlank(charsetName)) {
				throw new IllegalArgumentException("字符串或字符集不能为空");
			}
			return str.getBytes(charsetName);
		} catch (UnsupportedEncodingException e) {
			throw new IllegalArgumentException(e);
		}
	}


	/**
	 * 将字节数组转成指定编码的字符串
	 * @param bytes byte字节数组
	 * @param charsetName 编码格式
	 * @return 字符串
	 */
	public static String bytesToString(byte[] bytes, String charsetName) {
		try {
			String str = new String(bytes, charsetName);
			return str;
		} catch (UnsupportedEncodingException e) {
			throw new IllegalArgumentException(e);
		}
	}

	/**
	 * 将字节数组转成字符串，默认UTF-8编码
	 * @param bytes byte字节数组
	 * @return 字符串
	 */
	public static String bytesToString(byte[] bytes) {
		try {
			String str = new String(bytes, CharEncoding.UTF_8);
			return str;
		} catch (UnsupportedEncodingException e) {
			throw new IllegalArgumentException(e);
		}
	}

	/**
	 * 字符串是否有数据
	 * @param str 字符串
	 * @return 是否有数据
	 */
	public static boolean hasLength(String str) {
		return str != null && str.length() > 0;
	}


	public static boolean hasText(String str) {
		if (!hasLength(str)) {
			return false;
		} else {
			int strLen = str.length();

			for(int i = 0; i < strLen; ++i) {
				if (!Character.isWhitespace(str.charAt(i))) {
					return true;
				}
			}

			return false;
		}
	}
}


